<?php
use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendSmsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;

use think\facade\Db;

function success($msg = '', $data = null)
{
    return json([
        'code' => 1,
        'message' => $msg,
        'data' => $data,
    ]);
}

function error($msg = '', $data = null)
{
    return json([
        'code' => 0,
        'message' => $msg,
        'data' => $data,
    ]);
}

function createRandStr($length = 8)
{
    $str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randStr = '';
    for ($i = 0; $i <= $length; $i++) {
        $str[mt_rand(0, 35)];
    }
    return $randStr;
}

function signToken($userId, $mobile)
{
    $data = [
        'iss' => request()->domain(),

        'iat' => time(),
        'data' => [
            'user_id' => $userId,
            ' mobile' => $mobile,
        ]
    ];
    $key = config('app.jwt key');
    $token = \Firebase\JWT\JWT::encode($data, $key, 'Hs256');
    return $token;
}

function sendAliSms($mobile)
{
    $config = new Config([
        // 从阿里云获取
        'accessKeyId' => config('app.aliSms.accessKeyId'),
        'accessKeySecret' => config('app.aliSms.accessKeySecret'),
    ]);

    $config->endpoint = "dysmsapi.aliyuncs.com";
    $client = new Dysmsapi($config);

    // 运行时参数超时设置，仅对使用了该运行时参数实例的请求有效
    $runtimeOptions = new RuntimeOptions();
    // true 忽略证书校验
    $runtimeOptions->ignoreSSL = true;

    $sendSmsRequest = new SendSmsRequest();
    // 手机号
    $sendSmsRequest->phoneNumbers = $mobile;
    // 签名名称
    $sendSmsRequest->signName = '替换为你申请的签名';
    // 模板CODE
    $sendSmsRequest->templateCode = '替换为你申请的模板CODE';
    // 生成随机数作为验证码
    $code = mt_rand(1111, 9999);
    $sendSmsRequest->templateParam = json_encode(['code' => $code]);
    try {
        $response = $client->sendSmsWithOptions($sendSmsRequest, $runtimeOptions);
    } catch (\Exception $exception) {
        halt($exception->getMessage());
    }
    if ($response->body->code == 'OK') {
        Db::name('sms_code')->insert([
            'mobile' => $mobile,
            'code' => $code,
            'send_time' => time()
        ]);
        echo '短信发送成功！';
    }
}
//模拟发送
function sendSms($mobile)
{
    $code = mt_rand(1111, 9999);

    Db::name('sms_code')->insert([
        'mobile' => $mobile,
        'code' => $code,
        'send_time' => time()
    ]);
    echo $code;

}

function checkSmsCode($mobile, $code)
{
    $log =\api\zhuce\model\SmsModel::where('mobile','=',$mobile)->find();
    if (!$log) {
        return false;
    }
    if ($log['code'] != $code) {
        return false;
    }
    if (time() - $log['send_time'] > 600) {
        \api\zhuce\model\SmsModel::where('mobile','=',$mobile)
            ->delete();
        return false;
    }
    \api\zhuce\model\SmsModel::where('mobile','=',$mobile)
        ->delete();
    return true;
}

